//express的使用-开启服务器

//1.安装 express  : npm i express -S 保存生产依赖

//2.引入模块
let express = require("express"); //绝对路径
const { createProxyMiddleware } = require("http-proxy-middleware"); //需要第三方模块做服务器代理

// let allRouter = require("./router/index"); //allRouter是中间件
// console.log(config);

//3.使用模块
let app = express(); //实例化过程

app.use((req, res, next) => {
  //下面所有的接口都允许直接请求
  res.header("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Content-Type,Content-Length, Authorization, Accept,X-Requested-With"
  );
  res.header(
    "Access-Control-Allow-Methods",
    "PUT,PATCH,POST,GET,DELETE,OPTIONS"
  );

  // 跨域请求CORS中的预请求
  if (req.method == "OPTIONS") {
    //特殊请求：发送了请求头的那些请求
    res.sendStatus(200); /*让options请求快速返回*/
  } else {
    next();
  }
});

// app.use(express.static({path:"./",index:'main.html',maxAge:5000})); //利用express的static方法开启静态资源服务器
app.use(express.static("./")); //利用express的static方法开启静态资源服务器

//使用路由进行接口管理:主路由
// app.use(allRouter);

//jsonp跨域
let data = require("./data.json");
app.get("/jsonp", (req, res) => {
  let { callback } = req.query; //callback是用来接收函数名的
  let str = JSON.stringify(data);
  res.send(`${callback}('${str}')`); //前后端交互必须是传字符串 show(4454)
});

//cors跨域
app.get("/cors", (req, res) => {
  res.header("Access-Control-Allow-Origin", "*"); //*代表所有人可以访问
  res.send("cors的数据");
});

//服务器代理
//目标地址：https://m.weibo.cn/api/config/list
//实际请求地址：http://localhost:9900/sinaapi/api/config/list
//代理：https://m.weibo.cn/sinaapi/api/config/list
//https://m.weibo.cn/api/config/list
app.use(
  "/sinaapi",
  createProxyMiddleware({
    target: "https://m.weibo.cn", //你要代理的网址：目标主机地址
    changeOrigin: true,
    pathRewrite: {
      //重写路径
      "^/sinaapi": "/",
    },
  })
);

//目标地址：https://cnodejs.org/api/v1/topics
app.use(
  "/nodeapi",
  createProxyMiddleware({
    target: "https://cnodejs.org", //你要代理的网址：目标主机地址
    changeOrigin: true,
    pathRewrite: {
      //重写路径
      "^/nodeapi": "/",
    },
  })
);

//4.开启服务器
app.listen(9900, () => {
  console.log("服务器已开启，请访问:http://localhost:9900");
});
